package com.example.smartpark.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.smartpark.dto.SystemConfigDTO;
import com.example.smartpark.exception.BusinessException;
import com.example.smartpark.mapper.SystemConfigMapper;
import com.example.smartpark.model.SystemConfig;
import com.example.smartpark.service.SystemConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 系统配置服务实现
 */
@Slf4j
@Service
public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, SystemConfig> implements SystemConfigService {

    private static final Integer CONFIG_ID = 1;  // 系统只有一条配置记录，ID固定为1

    @Override
    public SystemConfigDTO getSystemConfig() {
        log.info("获取系统配置信息");
        
        // 获取系统配置
        SystemConfig systemConfig = getConfigById();
        
        // 没有配置记录时，创建默认配置
        if (systemConfig == null) {
            systemConfig = createDefaultConfig();
        }
        
        return convertToDTO(systemConfig);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public SystemConfigDTO updateSystemConfig(SystemConfigDTO systemConfigDTO) {
        log.info("更新系统配置信息: {}", systemConfigDTO);
        
        // 获取系统配置
        SystemConfig systemConfig = getConfigById();
        
        // 没有配置记录时，创建默认配置
        if (systemConfig == null) {
            systemConfig = createDefaultConfig();
        }
        
        // 更新配置信息
        BeanUtils.copyProperties(systemConfigDTO, systemConfig);
        systemConfig.setId(CONFIG_ID);  // 确保ID为1
        
        // 保存更新
        if (!this.updateById(systemConfig)) {
            throw new BusinessException("更新系统配置失败");
        }
        
        return convertToDTO(systemConfig);
    }
    
    /**
     * 获取系统配置
     *
     * @return 系统配置
     */
    private SystemConfig getConfigById() {
        return this.getById(CONFIG_ID);
    }
    
    /**
     * 创建默认配置
     *
     * @return 默认配置
     */
    private SystemConfig createDefaultConfig() {
        log.info("创建默认系统配置");
        
        SystemConfig config = new SystemConfig();
        config.setId(CONFIG_ID);
        config.setSystemName("智慧停车场管理系统");
        config.setContactPhone("400-123-4567");
        config.setOpenTime(java.time.LocalTime.of(6, 0));
        config.setCloseTime(java.time.LocalTime.of(23, 0));
        config.setRecognitionTime(3);
        config.setReservationValidTime(15);
        config.setDefaultPassword("123456");
        
        // 保存默认配置
        if (!this.save(config)) {
            throw new BusinessException("创建默认系统配置失败");
        }
        
        return config;
    }
    
    /**
     * 转换为DTO
     *
     * @param systemConfig 系统配置
     * @return 系统配置DTO
     */
    private SystemConfigDTO convertToDTO(SystemConfig systemConfig) {
        SystemConfigDTO dto = new SystemConfigDTO();
        BeanUtils.copyProperties(systemConfig, dto);
        return dto;
    }
} 